# ============================================================
# * Copyright © hk. 2022-2025. All rights reserved.
# * File name: CMakeLists.txt
# * Author   : 苏木
# * Date     : 2025-05-22
# * Version  : 
# * Description: cmake version 3.16.3
# ============================================================
## https://cmake.com.cn/cmake/help/latest/guide/tutorial/index.html
## https://cmake.org/cmake/help/latest/

# 指定 CMake 的最低版本要求
# --------------------------------------------------
cmake_minimum_required(VERSION 3.10)


# 设置项目名称和使用的编程语言
# --------------------------------------------------
project(SPROJECT C)


# 指定可执行程序和源文件
# --------------------------------------------------
add_executable(app_demo.out main.c)

# foreach循环
# --------------------------------------------------

# 1. 基本形式
# foreach(loopVar arg1 arg2 ...)
#  # ...
# endforeach()

message(STATUS "==> basic")
foreach(loopVar a b c d e)
	message(STATUS "loopVar = ${loopVar}")
endforeach()
message("")

# 2. 常规形式：参数也可以通过一个或多个列表来指定变量
# foreach(loopVar IN [LISTS listVar1 ...] [ITEMS item1 ...])
#  # ...
# endforeach()
# 可以使用ITEMS关键字指定单个参数，但是LISTS关键字允许指定一个或多个列表变量。
# 使用常规形式时，必须提供一个或两个ITEMS和/或LISTS。
# 两者都提供时，ITEMS必须出现在LISTS之后。listVarN列表变量允许是一个空列表。
message(STATUS "==> normal")
set(list1 A B)
set(list2)
set(foo WillNotBeShown)
foreach(loopVar IN LISTS list1 list2 ITEMS foo bar)
	message(STATUS "Iteration for: ${loopVar}")
endforeach()
message("")

# 3. 对数值迭代
# foreach(loopVar RANGE start stop [step])
# 使用foreach()时，循环执行时将loopVar设置为范围中开始停止(包括)的每个值。
# 如果提供了step选项，则在每次迭代后将此值替换为前一个值，当结果大于stop时循环停止。
message(STATUS "==> Iterative numbers")
foreach(loopVar RANGE 0 6 2)
	message(STATUS "loopVar = ${loopVar}")
endforeach()
message("")

# RANGE形式可以只接受一个参数：foreach(loopVar RANGE value)
# 这相当于 foreach(loopVar RANGE 0 value)，循环体将执行(value + 1)次，
# 更直观的数值是循环体执行的次数，显式地指定开始和停止值会让循环更为清楚。
foreach(loopVar RANGE 3)
	message(STATUS "loopVar = ${loopVar}")
endforeach()
message("")
